# -*- coding: utf-8 -*-
# @File  : 函数参数.py
# @Author: zbh
# @Date  : 2025/2/14_10:30


dict1 = {'name': 'zbh', 'age': 18, 'weight': 70}
a="python"
b=[1,2,3,4]

# 不定长参数
def func(**value):
    print(value)

func(name="pycharm")

def functest(name,age,weight):
    print(name, age, weight,sep=",")

functest(*dict1)   # name age weight
functest(**dict1)   # zbh 18 70


# 推导式
x = [x for x in a if x != 'h']
print(x)
x =[x for x in dict1.keys()]
print(x)



# 内嵌函数

def func_out():
    str1 = "hello_out"
    def func_inner():
        nonlocal str1  # 指示str1 不是内嵌函数的变量，而是其外部函数func_out()的变量
        str2 = "helleo_inner"
        str1=str1+",world"
        print(str2,str1)
    func_inner()
    return str1


print(func_out())



# 字符串格式化.format()
name='张三'
age=18
address='北京'
info=['张三',18,'北京']
print("我的名称是{0}，年龄是{1}，地址是：{2}".format(name,age,address))
print("我的名称是{}，年龄是{}，地址是：{}".format(*info))
print("我的名称是%s，年龄是%d，地址是：%s" %(name,age,address))
# python3.6开始支持新的字符串格式化语法，使用字母f加格式化的字符串，功能和"str".format()类似
print(f"我的名称是{name}，年龄是{age}，地址是：{address}")


# 类的方法即类里的函数，python的类方法必须有一个额外的第一个参数，类方法第一个参数名为self，表示类的实例(对象)，而非类本身
# 定义时有self，但在使用类方法时，不用再写这个参数！
class MyClass:
    a = 4      # 类变量
    _aa="受保护的变量"
    __aaa="私有变量"
    def __init__(self,name):  # 构造函数
        self.b = 5  # 实例变量 初始化方法，self表示实例本身
        self.name = name

    def func(self):
        print(self.name)
        print(self.__aaa)
    def __siyoufunc(self):
        print(self.name)

myclass = MyClass("zbh")  # 类的实例化，创建一个对象；参数是传给__init__()方法的
myclass.func()
print("*"*50)
print(myclass.a,myclass.b,myclass.name,sep=",")
# ⑦特殊属性
# _protedAttr            #以单下划线开头表示protected变量，只允许其本身与子类进行访问
# __privateAttr           #以双下划线开头表示private变量，只允许这个类本身访问
# __privateMethod        #以双下划线开头的方法为private方法
#
# __xxx__()               #特殊方法，以双下划线开头及双下划线结尾
#
# 对象不可访问类的私有变量（以双下划线开头），但可用以下形式来访问：
# 对象名._类名__私有属性名
print("*"*50)
print("访问受保护的变量：",MyClass._aa,myclass._aa)
print("*"*50)
print("对象不能直接访问私有变量：",MyClass("zhangsan").func())
print("对象方位私有变量的方法：",MyClass("zhangsan")._MyClass__aaa)
print("*"*50)
myclass._MyClass__siyoufunc()   # 私有方法可以访问


print("*"*50)
from datetime import datetime
import time
print("当前时间戳为：", time.time())
print("当前时间为：", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
print(time.ctime(time.time()))


now = datetime.now()
print("获取当前日期和时间以及年月日时分秒：",now,'\n',now.year,now.month,now.day,now.hour,now.minute,now.second)

print("通过当前时间格式化成字符串",now.strftime('%Y-%m-%d %H:%M:%S'))

ctime=now.strftime('%Y %m %d %H:%M:%S')
print(type(ctime))
print(ctime.split(' '))

print("*"*50)
import os
print("获得当前工作目录：",os.getcwd())
print(os.path.abspath('.'))  # 获得当前工作目录
print(os.path.abspath('..'))  # 获得当前工作目录的父目录
print(os.path.abspath(os.curdir))  # 获得当前工作目录
print(os.path.abspath(os.pardir))  # 获得当前工作目录的父目录
print(os.path.abspath(os.path.dirname(__file__)))  # 获得当前工作目录

path=r"C:\Users\zhangbinghui\PycharmProjects\os创建目录"
os.makedirs(path)
print("创建目录：",path)
os.chdir(path)
print("修改工作目录为：",os.getcwd())
os.chdir(r"C:\Users\zhangbinghui\PycharmProjects\python基础")  #切换目录
os.rmdir(path) # 删除目录
print("修改后的工作目录为：",os.getcwd())
a=os.system("python --version")   # 执行系统命令,成功返回0，失败返回1
print(a)

# 拼接文件路径,os.path.join()主要用于将多个路径片段组合成一个完整的路径
print(os.path.join(r"C:\Users\zhangbinghui\PycharmProjects\python基础",'test','test.txt'))
print("*"*50)
# 把列表中的字符串拼接成一个完整的字符串
l1=["Hello","World."]
l2=['a','b','c']
print('用逗号拼接列表：',','.join(l1))
print('用空格拼接列表：',''.join(l2))

r=''
for i in l2:
    r+=i
print('通过+号循环拼接：',r)
print("*"*50)


import getpass
print(getpass.getuser())
# print("请输入密码：",getpass.getpass())  #  获取用户输入密码，不回显，该函数在IDLE/PyCharm里不生效
print("*"*50)
















